package com.tianlu.store.entity;
 
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.tianlu.store.enums.UserLevelEnum;
import com.tianlu.store.enums.UserStatusEnum;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.tianlu.store.common.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;

import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 用户表(UserInfo)实体类
 *
 * @author 梁东烂
 * @since 2023-04-01 17:28:49
 */
@Data
@ApiModel(value = "用户表实体类", description = "用户表实体类")
@TableName("t_user_info")
public class UserInfo extends BaseEntity<UserInfo> {
    private static final long serialVersionUID = -84756093682910757L;
    /**
     * 编码
     */
    @ApiModelProperty(value = "编码")
    private String code;
    /**
     * 昵称
     */   
    @ApiModelProperty(value = "昵称")
    @NotBlank(message = "昵称不能为空！")
    private String name;
    /**
     * 电话
     */   
    @ApiModelProperty(value = "电话")
    @NotBlank(message = "电话不能为空！")
    private String phone;

    /**
     * 微信openid
     */
    @ApiModelProperty(value = "微信openid")
    @NotBlank(message = "openid不能为空！")
    private String openId;

    /**
     * 头像
     */
    @ApiModelProperty(value = "头像")
    private String avatar;

    /**
     * 状态：0禁用，1启用
     */   
    @ApiModelProperty(value = "状态：0禁用，1启用")
    private Integer status;

    /**
     * 级别：1游客，2代理商，3分公司
     */   
    @ApiModelProperty(value = "级别：1游客，2代理商，3分公司")
    private Integer level;

    /**
     * 积分
     */   
    @ApiModelProperty(value = "积分")
    private BigDecimal score;

    /**
     * 上级id
     */   
    @ApiModelProperty(value = "上级id")
    @NotNull(message = "电话不能为空！")
    private Long parentId;

    /**
     * 上级ids，中间用逗号分割
     */   
    @ApiModelProperty(value = "上级ids，中间用逗号分割")
    private String parentIds;

    /**
     * 小程序码
     */
    @ApiModelProperty(value = "小程序码")
    private String codePath;

    /**
     * 密码
     */
    @ApiModelProperty(value = "密码")
    private String password;

    /**
     * 本周是否已领取免费产品，1已领取，0未领取
     */
    @ApiModelProperty(value = "本周是否已领取免费产品，1已领取，0未领取")
    private Integer freeFlag;
    /**
     * 注册时间
     */
    @ApiModelProperty(value = "注册时间")
    private Date signTime;

    /**
     * 团队成员
     */
    @ApiModelProperty(value = "团队成员")
    @Transient
    @TableField(exist = false)
    private Integer teamMembers;

    /**
     * 团队业绩
     */
    @ApiModelProperty(value = "团队业绩")
    @Transient
    @TableField(exist = false)
    private BigDecimal teamPerformance;

    /**
     * 状态：0禁用，1启用
     */
    @ApiModelProperty(value = "状态：0禁用，1启用")
    @Transient
    @TableField(exist = false)
    private String statusText;
    public String getStatusText() {
        return status == null ? "" : UserStatusEnum.findByCode(status);
    }

    /**
     * 级别：1游客，2代理商，3分公司
     */
    @ApiModelProperty(value = "级别：1游客，2代理商，3分公司")
    @Transient
    @TableField(exist = false)
    private String levelText;
    public String getLevelText() {
        return level == null ? "" : UserLevelEnum.findByCode(level);
    }

    /**
     * 昵称+电话
     */
    @ApiModelProperty(value = "昵称+电话")
    @Transient
    @TableField(exist = false)
    private String nameText;
    public String getNameText() {
        return StrUtil.isBlank(name) ? "" : name + "-" + code + "-" + UserLevelEnum.findByCode(level);
    }

    /**
     * 下级用户
     */
    @ApiModelProperty(value = "下级用户")
    @Transient
    @TableField(exist = false)
    private List<UserInfo> children;

    /**
     * token
     */
    @ApiModelProperty(value = "token")
    @Transient
    @TableField(exist = false)
    private String token;

    /**
     * 积分明细备注
     */
    @ApiModelProperty(value = "积分明细备注")
    @Transient
    @TableField(exist = false)
    private String msg;

    /**
     * 编码
     */
    @ApiModelProperty(value = "编码")
    @Transient
    @TableField(exist = false)
    private String codeText;
    public String getCodeText() {
        return code;
    }
}
